#include<vector>
#include<iostream>
#include<cmath>
using namespace std;

struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode() : val(0), left(nullptr), right(nullptr) {}
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};

class Solution {
public:
	void dfs(TreeNode* root, vector<string>& arr, string cur) {
        if (!root) return;

        // 拼接当前节点
        if (!cur.empty()) cur += "->";
        cur += to_string(root->val);

        // 到达叶子节点
        if (!root->left && !root->right) {
            arr.push_back(cur);
            return;
        }

        // 继续递归左右子树
        if (root->left) dfs(root->left, arr, cur);
        if (root->right) dfs(root->right, arr, cur);
    }

    //257. 二叉树的所有路径:给你一个二叉树的根节点 root ，按 任意顺序 ，返回所有从根节点到叶子节点的路径。
    vector<string> binaryTreePaths(TreeNode* root) {
        vector<string> res;
        dfs(root, res, "");
        return res;
    }
};